﻿/*
 *      CentroVentasCore32  - CVCore32.dll
 *      
 *      Desarrollado por:
 *                      Francisco Acevedo.
 *                      David Avila.
 *                      José Pérez.
 *                      
 *      Todos los derechos reservados.
 */

using System;
/*
 *      CLASE: Login   
 * Notas de versión:
 * 
 * [04-01-2012]
 *      -   Se creo pagina, adornada simple con StackPanel, sin funcionamiento.
 * [05-01-2012]
 *      -   Login funcionando.
 *      -   Proceso de redireccion a la pagina principal.
 *      -   Agregado soporte a tecla enter (PasswordBox).
 * [06-01-2012]
 *      -   Se cambio redireccionamiento.
 *      -   Agregado soporte a tecla enter (txtUsuario).
 * [11-01-2012]
 *      -   Solucionado Sistema EntityFramework.
 */
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using System.Data.Entity;
using System.ComponentModel;

namespace CentroVentas.Forms
{
    /// <summary>
    /// Lógica de interacción para Login.xaml
    /// </summary>
    public partial class Login : UserControl
    {

        public Login()
        {
            InitializeComponent();
        }

        public Login(String rut)
        {
            InitializeComponent();
            if (String.IsNullOrWhiteSpace(rut))
            {
                txtUsuario.Text = "";
                txtUsuario.Focus();
            }
            else
            {
                txtUsuario.Text = rut;
                txtPass.Focus();
            }
        }



        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            txtUsuario.Focus();
        }

        private void btnAceptar_Click(object sender, RoutedEventArgs e)
        {
            
            BackgroundWorker worker = new BackgroundWorker();
            //this is where the long running process should go
            worker.DoWork += (o, ea) =>
            {
                //no direct interaction with the UI is allowed from this method
                for (int i = 0; i < 100; i++)
                {
                    System.Threading.Thread.Sleep(25);
                }
            };
            worker.RunWorkerCompleted += (o, ea) =>
            {
                //work has completed. you can now interact with the UI
                if (String.IsNullOrWhiteSpace(txtUsuario.Text) || String.IsNullOrWhiteSpace(txtPass.Password))
                {
                    MessageBox.Show("Usuario o contraseña erroneos.");
                }
                else
                {
                    if (CVCore32.Class.Funciones.Usuarios.Usuario.ExisteUsuario(txtUsuario.Text))
                    {
                        try
                        {
                            CVCore32.Data.Usuario user = CVCore32.Class.Funciones.Usuarios.Usuario.getUsuario(txtUsuario.Text);
                            if (user.Password == CVCore32.Class.Seguridad.Encrypter.generarClaveSHA512(txtPass.Password))
                            {
                                if (Convert.ToInt32(user.Estado) == 1)
                                {
                                    CVCore32.Class.Core.Sesion sesion = CVCore32.Class.Core.Sesion.GetInstace;
                                    sesion.IdUsuario = Convert.ToInt32(user.UsuarioId);
                                    NavigationService.GetNavigationService(this).Navigate(new Forms.Principal());
                                }
                                else
                                {
                                    MessageBox.Show("El usuario no tiene acceso a la aplicación");
                                }
                            }
                            else
                            {
                                MessageBox.Show("Usuario o contraseña erroneos.");
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.InnerException.ToString(), "CentroVentas", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Usuario no existe.");
                    }
                }
                Busy.IsBusy = false;
            };
            //set the IsBusy before you start the thread
            Busy.IsBusy = true;
            worker.RunWorkerAsync();


        }

        private void txtPass_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {

            if (e.Key == System.Windows.Input.Key.Enter)
            {
                if (String.IsNullOrWhiteSpace(txtUsuario.Text) || String.IsNullOrWhiteSpace(txtPass.Password))
                {
                    MessageBox.Show("Usuario o contraseña erroneos.");
                }
                else
                {
                    BackgroundWorker worker = new BackgroundWorker();
                    //this is where the long running process should go
                    worker.DoWork += (o, ea) =>
                    {
                        //no direct interaction with the UI is allowed from this method
                        for (int i = 0; i < 100; i++)
                        {
                            System.Threading.Thread.Sleep(25);
                        }
                    };
                    worker.RunWorkerCompleted += (o, ea) =>
                    {
                        if (CVCore32.Class.Funciones.Usuarios.Usuario.ExisteUsuario(txtUsuario.Text))
                        {
                            try
                            {
                                CVCore32.Data.Usuario user = CVCore32.Class.Funciones.Usuarios.Usuario.getUsuario(txtUsuario.Text);
                                if (user.Password == CVCore32.Class.Seguridad.Encrypter.generarClaveSHA512(txtPass.Password))
                                {
                                    if (Convert.ToInt32(user.Estado) == 1)
                                    {
                                        CVCore32.Class.Core.Sesion sesion = CVCore32.Class.Core.Sesion.GetInstace;
                                        sesion.IdUsuario = Convert.ToInt32(user.UsuarioId);
                                        NavigationService.GetNavigationService(this).Navigate(new Forms.Principal());
                                    }
                                    else
                                    {
                                        MessageBox.Show("El usuario no tiene acceso a la aplicación");
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Usuario o contraseña erroneos.");
                                }
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message, "CentroVentas", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Usuario o contraseña erroneos.");
                        }

                        //work has completed. you can now interact with the UI
                        Busy.IsBusy = false;
                    };
                    //set the IsBusy before you start the thread
                    Busy.IsBusy = true;
                    worker.RunWorkerAsync();
                }
            }
        }

        private void btnCancelar_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }

        private void txtUsuario_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == System.Windows.Input.Key.Enter)
            {
                if (String.IsNullOrWhiteSpace(txtUsuario.Text) || String.IsNullOrWhiteSpace(txtPass.Password))
                {
                    MessageBox.Show("Usuario o contraseña erroneos.");
                }
                else
                {
                    BackgroundWorker worker = new BackgroundWorker();
                    //this is where the long running process should go
                    worker.DoWork += (o, ea) =>
                    {
                        //no direct interaction with the UI is allowed from this method
                        for (int i = 0; i < 100; i++)
                        {
                            System.Threading.Thread.Sleep(25);
                        }
                    };
                    worker.RunWorkerCompleted += (o, ea) =>
                    {
                        if (CVCore32.Class.Funciones.Usuarios.Usuario.ExisteUsuario(txtUsuario.Text))
                        {
                            try
                            {
                                CVCore32.Data.Usuario user = CVCore32.Class.Funciones.Usuarios.Usuario.getUsuario(txtUsuario.Text);
                                if (user.Password == CVCore32.Class.Seguridad.Encrypter.generarClaveSHA512(txtPass.Password))
                                {
                                    if (Convert.ToInt32(user.Estado) == 1)
                                    {
                                        CVCore32.Class.Core.Sesion sesion = CVCore32.Class.Core.Sesion.GetInstace;
                                        sesion.IdUsuario = Convert.ToInt32(user.UsuarioId);
                                        NavigationService.GetNavigationService(this).Navigate(new Forms.Principal());
                                    }
                                    else
                                    {
                                        MessageBox.Show("El usuario no tiene acceso a la aplicación");
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Usuario o contraseña erroneos.");
                                }
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message, "CentroVentas", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                            }
                        }
                        else
                        {
                            MessageBox.Show("Usuario o contraseña erroneos.");
                        }

                        //work has completed. you can now interact with the UI
                        Busy.IsBusy = false;
                    };
                    //set the IsBusy before you start the thread
                    Busy.IsBusy = true;
                    worker.RunWorkerAsync();
                }
            }
        }

        private void txtPass_IsKeyboardFocusedChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            if (System.Console.CapsLock)
            {
                ToolTip tt = new ToolTip();
                tt.Content = "Mayusculas activado";
                txtPass.ToolTip = tt;
                tt.StaysOpen = true;
                ToolTipService.SetInitialShowDelay(txtPass, 0);
            }
            else
            {
                txtPass.ToolTip = null;
            }
        }

        private void chkServer_Checked(object sender, RoutedEventArgs e)
        {
            CVCore32.Class.Core.Sesion sesion = CVCore32.Class.Core.Sesion.GetInstace;
            sesion.ServidorWeb = Convert.ToBoolean(chkServer.IsChecked);
        }
    }
}
